/* Picaroon commands list */

type Command uint8

//Philosophical discussion: is a command a) any task the player can ask of the game via the interface b) only tasks which the *character* performs which alter the world
// (checking inventory does not alter the world, not does it take time; similarly for Examining items/cells/creatures)
const (
	C_NORTH Command = iota //movement directions (not all available in all tilings)
	C_NE
	C_EAST
	C_SE
	C_SOUTH
	C_SW
	C_WEST
	C_NW
	C_GET //pickup from ground
	C_WAIT
	C_SEARCH
	C_INVENT //is this a command per se? It can be handled entirely by the Grconsole_rw (which knows the inventory)
	C_DROP //drop (select item) on ground  FIRST COMMAND NEEDING AN ITEM
	C_USE //use (select item) appropriately to type
	C_EQUIP //wear/wield (select item) if possible
	C_REMOVE //remove/unwield (select item) if possible
	C_THROW //throw/launch (select item) towards (select destination coord) FIRST COMMAND NEEDING ITEM,COORD
	C_EXAMINE //examine (select item) in inventory (if in "examine" mode, toggles it off again), or examine (select item or coord) if not in inventory mode
)

//define the "sentinel" constants that group the commands by the type of additional input they need.
const C_ITEMSELECT = C_DROP //first command to need to select an item
const C_ITEMCOORDSELECT = C_THROW //first command to need to select an item and a coordinate 
//C_EXAMINE is always a special case, as it is modal. C_INVENT may be a special case as it toggles the interface mode.

type ComSeq struct {
	command Command
	options []interface{} //any options the command takes - C_DROP expects an item inventory id, C_THROW expects an item inventory id and a tile coord
}
